home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / misc / amag / sh9301c.lha / CPlusPlus(S.79) / Listing2.cpp < prev    next >
C/C++ Source or Header  |  1993-01-22  |  3KB  |  109 lines

  1. // Einfache Implementierung komplexer Zahlen in C++
  2. // Geschrieben von Jens Gelhar 20.11.92
  3. #include <iostream.h>     // Includedatei für Ein- und Ausgabe
  4.  
  5. // ***** Die Klassendefinition und Funktionsprototypen *****
  6. class Complex {
  7.     public:                    // d. h. keine privaten Bezeichner
  8.  
  9.     double r, i;             // Real- und Imaginärteil
  10.  
  11.     Complex(double re=0, double im=0);   // Konstruktor
  12.  
  13.     Complex conj() const;    // berechnet konjugiert-komplexe
  14. };
  15.  
  16. // Die vier Grundrechenarten:
  17. Complex operator + (const Complex &c1, const Complex &c2);
  18. Complex operator - (const Complex &c1, const Complex &c2);
  19. Complex operator * (const Complex &c1, const Complex &c2);
  20. Complex operator / (const Complex &c1, const Complex &c2);
  21.  
  22. // Vergleichs-Operationen:
  23. int operator == (const Complex &c1, const Complex &c2);
  24. int operator != (const Complex &c1, const Complex &c2);
  25.  
  26. // Ausgabe-Funktion:
  27. ostream &operator << (ostream &os, const Complex &c);
  28.  
  29. // ***** Implementation *****
  30. Complex::Complex(double re, double im) {
  31.   r = re;
  32.   i = im;
  33. }
  34.  
  35. Complex Complex::conj() const {
  36.   Complex ergebnis(r, -i);
  37.   return ergebnis;
  38. }
  39.  
  40. Complex operator + (const Complex &c1, const Complex &c2) {
  41.   Complex ergebnis(c1.r+c2.r, c1.i+c2.i);
  42.   return ergebnis;
  43. }
  44.  
  45. Complex operator - (const Complex &c1, const Complex &c2) {
  46.   Complex ergebnis(c1.r-c2.r, c1.i-c2.i);
  47.   return ergebnis;
  48. }
  49.  
  50. Complex operator * (const Complex &c1, const Complex &c2) {
  51.   Complex ergebnis;
  52.   ergebnis.r = c1.r*c2.r - c1.i*c2.i;
  53.   ergebnis.i = c1.r*c2.i + c1.i*c2.r;
  54.   return ergebnis;
  55. }
  56.  
  57. Complex operator / (const Complex &c1, const Complex &c2) {
  58.   Complex nenner = c1 * c2.conj();
  59.   double zaehler = c2.r*c2.r + c2.i*c2.i;
  60.   return Complex(nenner.r/zaehler, nenner.i/zaehler);
  61. }
  62.  
  63. int operator == (const Complex &c1, const Complex &c2) {
  64.   return (c1.r == c2.r && c1.i == c2.i);
  65. }
  66.  
  67. int operator != (const Complex &c1, const Complex &c2) {
  68.   return (c1.r != c2.r || c1.i != c2.i);
  69. }
  70.  
  71. ostream &operator << (ostream &os, const Complex &c) {
  72.   if(c.r != 0)
  73.    { if (c.i > 0)
  74.        os << "(" << c.r << " +" << c.i << "i)";
  75.      else if (c.i < 0)
  76.        os << "(" << c.r << " -" << -c.i << "i)";
  77.      else
  78.        os << c.r;
  79.    }
  80.   else
  81.    if (c.i != 0)
  82.      os << c.i << "i";
  83.    else
  84.      os << "0";
  85.   return os;
  86. }
  87.  
  88. // ***** Ein simples Beispielprogramm: *****
  89. void main() {
  90.   Complex x, y;
  91.  
  92.   cout << "Bitte geben Sie zwei komplexe Zahlen ein:" << endl;
  93.   cout << "x (Realteil):     ";
  94.     cin >> x.r;
  95.   cout << "x (Imaginärteil): ";
  96.     cin >> x.i;
  97.  
  98.   cout << "y (Realteil):     ";
  99.     cin >> y.r;
  100.   cout << "y (Imaginärteil): ";
  101.     cin >> y.i;
  102.  
  103.   cout << endl;
  104.   cout << "x + y = " << x+y << endl;
  105.   cout << "x - y = " << x-y << endl;
  106.   cout << "x * y = " << x*y << endl;
  107.   cout << "x / y = " << x/y << endl;
  108. }
  109.